public void ResizeBuffer(int row,int column,byte[] buffer,int bufferOffset,int bytes)
public:void ResizeBuffer(int row,int column,array<byte>^ buffer,int bufferOffset,int bytes)
def ResizeBuffer(self,row,column,buffer,bufferOffset,bytes):
row
The number of the row to retrieve. The first row is 0, and the last row is 1 less than the image Height.
column
The column offset within the row to retrieve. The first column offset is 0, and the last column offset is 1 less than the image Width.
buffer
The buffer to hold the image data that this method gets.
bufferOffset
The zero-based index into buffer where retrieving should start.
bytes
The number of bytes to retrieve. Consider the BitsPerPixel, and avoid specifying a number that goes past the end of the row.
You can use the BitsPerPixel property with integer math to calculate the number of bytes needed for a particular number of pixels. For example:
NumberOfBytes = Image.BitsPerPixel * (Image.Width * Image.Height + 7) / 8;By using this low-level method to get any part of a row, you can write a procedure that accesses a single pixel or a rectangular area within the image.
This method accepts an offset parameter ( column) in pixels and a length ( bytes) in bytes. Therefore, you must consider the BitsPerPixel of the image when specifying these parameters. The following table describes the rules:
| BitsPerPixel | Column Offset (in Pixels) | Bytes to Get |
|---|---|---|
| 1 | Must be a multiple of 8 (such as 0,8, or 16). | Can be any number up to the end of the row. Consider that there are 8 pixels per byte. |
| 4 | Must be an even number (such as 0, 2, or 4). | Can be any number up to the end of the row. Consider that there are 2 pixels per byte. |
| 8 | Can be any column within the image. | Can be any number up to the end of the row. Consider that there is 1 pixel per byte. |
| 16 | Can be any column within the image. | Must be a multiple of 2 (such as 2, 4, or 6), because there are 2 bytes per pixel. |
| 24 | Can be any column within the image. | Must be a multiple of 3 (such as 3, 6, or 9), because there are 3 bytes per pixel. |
| 32 | Can be any column within the image. | Must be a multiple of 4 (such as 4, 8, or 12), because there are 4 bytes per pixel. |
| 48 | Can be any column within the image. | Must be a multiple of 6 (such as 6, 12, or 18), because there are 6 bytes per pixel. |
| 64 | Can be any column within the image. | Must be a multiple of 8 (such as 8, 16, or 24), because there are 8 bytes per pixel. |
Do not pass a value in bytes that goes past the end of the row. The process is faster when rows are retrieved sequentially, either top-down or bottom-up.
For more information, refer to Introduction to Image Processing With LEADTOOLS.
using Leadtools;using Leadtools.Codecs;public void RasterImageResizeExample(){string srcFileName = Path.Combine(LEAD_VARS.ImagesDir, "Image1.cmp");string destFileName = Path.Combine(LEAD_VARS.ImagesDir, "Image1_RasterImageResize.bmp");using (RasterCodecs codecs = new RasterCodecs()){// Load the source imageusing (RasterImage srcImage = codecs.Load(srcFileName)){// We will resize to half the original sizeint destWidth = srcImage.Width / 2;int destHeight = srcImage.Height / 2;// Create the destination imageusing (RasterImage destImage = new RasterImage(RasterMemoryFlags.Conventional,destWidth,destHeight,srcImage.BitsPerPixel,srcImage.Order,srcImage.ViewPerspective,srcImage.GetPalette(),IntPtr.Zero,0)){RasterImageResize resize = new RasterImageResize();// Add Event Handlerresize.Resize += new EventHandler<RasterImageResizeEventArgs>(resize_Resize);byte[] buffer = new byte[destImage.BytesPerLine];// Start the resize processresize.Start(srcImage,destWidth,destHeight,srcImage.BitsPerPixel,srcImage.Order,srcImage.DitheringMethod,RasterSizeFlags.None,srcImage.GetPalette());destImage.Access();// get the rows for the resized image, one by onefor (int row = 0; row < destImage.Height; row++){resize.ResizeBuffer(row, 0, buffer, 0, destImage.BytesPerLine);destImage.SetRow(row, buffer, 0, destImage.BytesPerLine);}destImage.Release();resize.Stop();// Save the destination imagecodecs.Save(destImage, destFileName, RasterImageFormat.Bmp, 24);}}}}private void resize_Resize(object sender, RasterImageResizeEventArgs e){// e.Row should ALWAYS be less than e.Image.Heightif (e.Row >= e.Image.Height){e.Cancel = true; // abort the resizereturn;}byte[] buffer = new byte[e.Bytes];e.Image.Access();e.Image.GetRowColumn(e.Row, e.Column, buffer, 0, e.Bytes);e.Image.Release();Marshal.Copy(buffer, 0, e.Buffer, e.Bytes);Console.WriteLine("{0}, {1}", e.Row, e.Column);}static class LEAD_VARS{public const string ImagesDir = @"C:\LEADTOOLS22\Resources\Images";}
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document
